package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int, 8)
	go func() {
		for i := 0; i < 8; i++ {
			ch <- i
			fmt.Println("子go程向channel中写入数据:", i)
		}
		close(ch)
		//ch<-88
	}()

	time.Sleep(time.Second * 5)

	//1、数据不发送完不应该关闭channel
	//2、已经关闭的channel，不能再向其写数据，报错:panic:send on closed channel
	//3、写端已关闭channel，可从中读取数据，读到的数据是0
	//4、读无缓冲channel，读到0，说明：写端关闭；读有缓冲channel，如果缓冲区内有数据，先读数据，读完数据后，可以继续读，读到0
	/*for {
		if num, ok := <-ch; ok == true {
			fmt.Println("主go程读取到数据:", num)
		} else {
			n := <-ch
			fmt.Println("channel关闭后读取到数据:", n)
			break
		}
	}*/

	for num1 := range ch {
		fmt.Println("主go程读取到数据：", num1)
	}

	for {
		;
	}
}
